#ifndef PREDATOR_STATES_H
#define PREDATOR_STATES_H

#include "Entity/Game/Predator.h"
#include "State/State.h"

//Seek
class PredatorStateSeek : public State<Predator>
{
private:
	PredatorStateSeek() {}
	PredatorStateSeek(const PredatorStateSeek&) {}
	PredatorStateSeek& operator=(const PredatorStateSeek&){}

	virtual ~PredatorStateSeek() {};

public:
	static PredatorStateSeek* GetInstance();

	virtual void Enter(Predator* p);
	virtual void Execute(Predator* p);
	virtual void Exit(Predator* p);

	virtual bool OnMessage(Predator* p, const Message& m);
};


//Chase
class PredatorStateChase : public State<Predator>
{
private:
	PredatorStateChase() {}
	PredatorStateChase(const PredatorStateChase&) {}
	PredatorStateChase& operator=(const PredatorStateChase&){}

	virtual ~PredatorStateChase() {};

public:
	static PredatorStateChase* GetInstance();

	virtual void Enter(Predator* p);
	virtual void Execute(Predator* p);
	virtual void Exit(Predator* p);

	virtual bool OnMessage(Predator* p, const Message& m);
};

//Rest
class PredatorStateRest : public State<Predator>
{
private:
	PredatorStateRest() {}
	PredatorStateRest(const PredatorStateRest&) {}
	PredatorStateRest& operator=(const PredatorStateRest&){}

	virtual ~PredatorStateRest() {};

public:
	static PredatorStateRest* GetInstance();

	virtual void Enter(Predator* p);
	virtual void Execute(Predator* p);
	virtual void Exit(Predator* p);

	virtual bool OnMessage(Predator* p, const Message& m);
};

#endif

